package com.ruoyi.common.core.domain;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * 分页参数
 *
 * @author lie
 * @date 2022/11/22
 */
@Data
@ApiModel("分页数据")
public class PageCondition<T> {

    @ApiModelProperty("当前页码")
    private int current = 1;

    @ApiModelProperty("每页显示记录数")
    private int size = 10;

    public Page<T> toPage() {
        Page<T> page = new Page<>(this.current, this.size);
        //关闭分页优化（会造成count语法错误）
        page.setOptimizeCountSql(false);
        page.addOrder(OrderItem.desc("create_time"));
        return page;
    }

    public Page<T> toMyPage() {
        Page<T> page = new Page<>(this.current, this.size);
        //关闭分页优化（会造成count语法错误）
        page.setOptimizeCountSql(false);
        return page;
    }

    /**
     * 设置排序字段
     *
     * @param orderByField order by字段
     * @param desc         是否倒序
     * @return {@link Page}<{@link T}>
     */
    public Page<T> toPage(String orderByField, boolean desc) {
        Page<T> page = new Page<>(this.current, this.size);
        //关闭分页优化（会造成count语法错误）
        page.setOptimizeCountSql(false);
        if (desc) {
            page.addOrder(OrderItem.desc(orderByField));
        } else {
            page.addOrder(OrderItem.asc(orderByField));
        }
        return page;
    }

    /**
     * 手动设置总记录数
     *
     * @param total 总计
     * @return {@link Page}<{@link T}>
     */
    public Page<T> toOptimizePage(int total) {
        Page<T> page = new Page<>(this.current, this.size, false);
        page.setTotal(total);
        return page;
    }
}
